package main

import "fmt"

func main() {
	// (1) 切片的初始化和追加
	//s := make([]int, 10)
	//
	//s = append(s, 1, 2, 3, 4, 4, 4, 4, 4, 4)
	//
	//fmt.Println(s)
	//[0 0 0 0 0 0 0 0 0 0 1 2 3 4 4 4 4 4 4]
	//(2) slice拼接问题
	s1 := []int{1, 2, 4}
	s2 := []int{5, 7, 8}
	fmt.Println(len(s1), cap(s1))

	s1 = append(s1, s2...)
	fmt.Println(s2)
	fmt.Println(s1)

	//(3)slice 中new的区别
	//new([]int) 创建一个指向 []int 类型的指针，并将其初始化为 nil。因此，list 是一个指向 nil 切片的指针。
	list := new([]int)

	//append 函数用来向切片添加元素。这里的 list 是一个 []int 类型的指针。直接在 list 上调用 append 会导致编译错误，因为 append 需要操作一个切片类型，而不是一个切片的指针。
	list = append(list, 1)

	fmt.Println(list)

	/**
	解引用是指访问指针所指向的实际值。在 Go 语言中，解引用是通过使用 * 操作符来实现的。例如，如果你有一个指向 int 类型的指针 p，则 *p 是指针 p 所指向的 int 值。通过解引用，你可以读取或修改指针所指向的实际数据。
	*/
}
